package br.org.espmessenger.middleware;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import br.org.espmessenger.modelo.MensagemConvite;
import br.org.espmessenger.modelo.Usuario;
import br.org.espmessenger.modelo.excecoes.ConviteJaEnviadoException;
import br.org.espmessenger.modelo.excecoes.LogonInvalidoException;
import br.org.espmessenger.modelo.excecoes.UsuarioInexistenteException;
import br.org.espmessenger.modelo.excecoes.UsuarioJaCadastradoException;
import br.org.espmessenger.servidor.FabricaDAO;
import br.org.espmessenger.servidor.UsuariosDAO;

public class ESPMessengerImpl extends UnicastRemoteObject implements ESPMessenger {
	private static final long serialVersionUID = 1L;

	public ESPMessengerImpl() throws RemoteException {}

	public void registrarNovaConta(Usuario usuario) throws RemoteException, UsuarioJaCadastradoException {
		UsuariosDAO dao = FabricaDAO.getFabricaDAO().getUsuariosDAO();
		if (dao.usuarioExiste(usuario)) {
			throw new UsuarioJaCadastradoException(String.format("Conta [Email: %s] já cadastrada no servidor", usuario.getEmail()));
		}
		dao.registrarNovaConta(usuario);
	}



	public void registrarConvite(MensagemConvite convite) throws RemoteException, 
																 UsuarioInexistenteException,
																 ConviteJaEnviadoException {
		if (FabricaDAO.getFabricaDAO().getUsuariosDAO().usuarioExiste(convite.getConvidado())) {
			throw new UsuarioInexistenteException("Usuário [Email: %s] não encontrado no servidor");
		}
		FabricaDAO.getFabricaDAO().getMensagensDAO().salvarConvite(convite);
	}

	public Usuario conectarUsuario(Usuario u) throws RemoteException,
			LogonInvalidoException {
		return FabricaDAO.getFabricaDAO().getUsuariosDAO().obterUsuarioPorLogon(u);
	}
	
	public Usuario desconectarUsuario(Usuario u) throws RemoteException {
		return null;
	}
	
}
